#include <webkit2/webkit-web-extension.h>
#include <glib.h>
#include <unistd.h>

// 提前声明函数
static void on_page_created(WebKitWebExtension* extension, WebKitWebPage* page, gpointer user_data);
static gboolean on_send_request(WebKitWebPage* page, WebKitURIRequest* request, WebKitURIResponse* redirect_response, gpointer user_data);

// 1. 资源拦截核心逻辑：使用 send-request 信号（WebKit2GTK 2.x 支持）
// 注意：send-request 信号的回调返回值为 gboolean（TRUE=拦截，FALSE=继续默认处理）
static gboolean on_send_request(WebKitWebPage* page, WebKitURIRequest* request, WebKitURIResponse* redirect_response, gpointer user_data) {
    const gchar* original_uri = webkit_uri_request_get_uri(request);
    if (original_uri == NULL) {
        return FALSE; // 无URI，继续默认处理
    }

    // 打印资源请求日志，方便排查
    g_print("[扩展进程ID:%d] 拦截资源请求: %s\n", getpid(), original_uri);

    // 目标：替换谷歌CDN jQuery为BootCDN jQuery（确保旧链接与网页实际请求一致）
    const gchar* target_old_uri = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js";
    const gchar* target_new_uri = "https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js";

    // 匹配并替换链接
    if (g_strcmp0(original_uri, target_old_uri) == 0) {
        g_print("[扩展进程ID:%d] 命中旧jQuery链接: %s\n", getpid(), original_uri);
        webkit_uri_request_set_uri(request, target_new_uri); // 覆盖请求URI
        // 验证替换结果
        const gchar* replaced_uri = webkit_uri_request_get_uri(request);
        g_print("[扩展进程ID:%d] 替换为新链接: %s\n", getpid(), replaced_uri);
    } else if (g_strstr_len(original_uri, -1, "jquery.min.js") != NULL) {
        // 提示不匹配的jQuery链接，方便修正target_old_uri
        g_print("[扩展进程ID:%d] 发现jQuery链接，但不匹配目标: %s\n", getpid(), original_uri);
    }

    //https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
    const gchar* target_old_uri_ui = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js";
    const gchar* target_new_uri_ui = "https://cdn.bootcdn.net/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js";
    // 匹配并替换链接
    if (g_strcmp0(original_uri, target_old_uri_ui) == 0) {
        g_print("[扩展进程ID:%d] 命中旧jQueryUI链接: %s\n", getpid(), original_uri);
        webkit_uri_request_set_uri(request, target_new_uri_ui); // 覆盖请求URI
        // 验证替换结果
        const gchar* replaced_uri_ui = webkit_uri_request_get_uri(request);
        g_print("[扩展进程ID:%d] 替换为新链接: %s\n", getpid(), replaced_uri_ui);
    } else if (g_strstr_len(original_uri, -1, "jquery-ui.min.js") != NULL) {
        // 提示不匹配的jQueryUI链接，方便修正target_old_uri_ui
        g_print("[扩展进程ID:%d] 发现jQueryUI链接，但不匹配目标: %s\n", getpid(), original_uri);
    }

    //https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css
    const gchar* target_old_uri_ui_css = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css";
    const gchar* target_new_uri_ui_css = "https://cdn.bootcdn.net/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css";
    // 匹配并替换链接
    if (g_strcmp0(original_uri, target_old_uri_ui_css) == 0) {
        g_print("[扩展进程ID:%d] 命中旧jQueryUI CSS链接: %s\n", getpid(), original_uri);
        webkit_uri_request_set_uri(request, target_new_uri_ui_css); // 覆盖请求URI
        // 验证替换结果
        const gchar* replaced_uri_ui_css = webkit_uri_request_get_uri(request);
        g_print("[扩展进程ID:%d] 替换为新链接: %s\n", getpid(), replaced_uri_ui_css);
    } else if (g_strstr_len(original_uri, -1, "jquery-ui.css") != NULL) {
        // 提示不匹配的jQueryUI CSS链接，方便修正target_old_uri_ui_css
        g_print("[扩展进程ID:%d] 发现jQueryUI CSS链接，但不匹配目标: %s\n", getpid(), original_uri);
    }


    return FALSE; // 关键：返回FALSE表示允许请求继续（仅替换URI，不拦截请求）
}

// 2. 页面创建时：绑定 send-request 信号（WebKit2GTK 2.x 核心信号）
static void on_page_created(WebKitWebExtension* extension, WebKitWebPage* page, gpointer user_data) {
    gint page_id = webkit_web_page_get_id(page);
    g_print("[扩展进程ID:%d] 新页面创建！页面ID: %d\n", getpid(), page_id);

    // 关键修复：绑定 send-request 信号（2.x版本唯一支持的资源拦截信号）
    g_signal_connect(
        page,                  // 目标对象（WebKitWebPage）
        "send-request",        // 2.x版本支持的资源拦截信号名
        G_CALLBACK(on_send_request), // 回调函数
        NULL                   // 用户数据
    );
}

// 3. 扩展初始化（WebKit自动调用）
G_MODULE_EXPORT void webkit_web_extension_initialize(WebKitWebExtension* extension) {
    g_print("[扩展进程ID:%d] jQuery替换扩展已初始化（WebKit 2.x兼容版）！\n", getpid());

    // 绑定页面创建事件（此信号名在2.x和4.x中一致）
    g_signal_connect(
        extension,
        "page-created",
        G_CALLBACK(on_page_created),
        NULL
    );
}

//gcc -shared -fPIC -o ./extensions/extension/libjqueryreplace.so ../src/http/jquery_replace_extension.c `pkg-config --cflags --libs webkit2gtk-4.1`
